Listas
-
Escreva um programa que leia uma lista de números, descubra o menor elemento e imprima o valor e a posição. Exemplo de execução:
Digite uma lista: 8 2 7 5 3 4 2 9 Um menor elemento vale 2 e está na posição 1.
-
Faça uma programa que leia uma lista
de números reais e devolve o desvio padrão corrigido usando a seguinte fórmula:onde
é o número de elementos e é a média dos elementos. -
Escreva um programa que recebe uma lista e um inteiro
e realiza um deslocamento à esquerda de tamanho m. Por exemplo a seguinte figura apresenta uma lista de tamanho 5, no qual se realiza um deslocamento de tamanho 2. -
Dada uma lista de inteiros, imprima a maior subsequência (com maior quantidade de elementos) estritamente crescente. Exemplo de execução:
Digite a lista: 10 20 3 4 5 6 7 50 10 100 200 300 2 3 Uma maior subsequencia crescente é 3 4 5 6 7 50 e tem 6 elementos.
-
Escreva um algoritmo que receba uma lista de inteiros
e dois índices e e calcule a soma da sublista , isso é, imprima o valor de . -
Faça um programa que leia uma lista de 10 caracteres que representam o gabarito de uma prova de múltipla escolha e outra lista de 10 caracteres que representam as respostas de um estudante. O programa deve imprimir o número de acertos do estudante.
-
Escreva um programa que leia dois conjuntos de nomes e calcule a interseção, a união e a diferença desses conjuntos. Lembre-se de que em um conjunto não pode haver repetição de elementos e a ordem dos elementos é irrelevante. Exemplo de execução:
Digite o conjunto 1: 8 2 7 5 3 4 9 Digite o conjunto 1: 1 5 6 9 A interseção é: 5 9 A união é: 8 2 7 5 3 4 9 1 6 A diferença é: 8 2 7 3 4
-
Faça um algoritmo que leia o nome de cinco alunos, as notas de português, matemática e física de cada um deles, calcule a média de cada uma das disciplinas e a média geral. Escreva as médias de português, matemática, física e média geral.
-
Suponha que um texto é formado por letras, vírgulas, pontos e espaços em branco. Escreva um programa que leia um texto e imprima uma lista das palavras (sem repetição) que têm comprimento menor ou igual a 5.
-
Leia o trecho abaixo.
lista1 = [1, 2, 4, 7, 5, 9] lista2 = lista1 pares = [] for i in range(len(lista2)): if lista2[i] % 2 == 1: lista2[i] = 2 * lista2[i] for numero in lista1: if numero % 2 == 0: pares.append(numero) print(pares)
a) Qual a saída do programa? Explique.
b) Reescreva o programa usando apenas list comprehensions.
Repetição limitada
-
Faça um algoritmo que, para cada número inteiro de 1 até 100, imprima “tic” se esse número for múltiplo de 3, imprima “toc” se for múltiplo de 5 e imprima “tic-toc” se for múltiplo de 15.
-
Faça um algoritmo para calcular e escrever o fatorial de um determinado número lido.
-
Faça um programa que lê um número
e crie uma lista de todos divisores de entre e . -
Para verificar se um número é primo, não precisamos testar todos os divisores entre
, basta testarmos até , já que o maior divisor próprio de não pode ser maior do que . Se prestarmos mais atenção, descobriremos que verdade basta testar os números . Por quê? -
Você possui um vergalhão com
centímetros e deseja construir uma caixa de ferro. A estrutura conterá um pedaço de vergalhão em cada aresta da caixa. Para evitar desperdício, a caixa deverá usar todo o vergalhão, mas ficará em um recinto de volume no máximo cm³. Faça um programa que imprima todas as dimensões inteiras em centímetros possíveis para essa caixa. -
Elabore um programa para calcular a raiz quadrada de um número positivo, usando o roteiro abaixo, baseado no método de aproximações sucessivas de Newton. O algoritmo deverá prover 20 aproximações. Seja
o número:a) a primeira aproximação para a raiz quadrada de
éb) as sucessivas aproximações serão
. -
Escreva um programa que leia uma lista de
números de ponto flutuante e separe esses números nos seguintes intervalos de tamanho uniforme: , , e . Exemplo de execução:Digite a lista: 2.0 61.5 −1.0 0.0 88.7 94.5 55.0 3.1415 100.0 75.0 Intervalo [0, 25): 2.0 0.0 3.1415 Intervalo [25, 50): (nenhum número) Intervalo [50, 75): 61.5 55.0 Intervalo [75, 100): 88.7 94.5 75.0
-
O que será impresso pelo programa abaixo? Assuma que o valor de D na declaração de x é o valor do último dígito do seu RA. Faça um teste de mesa, isso é, execute usando lápis e papel. Depois verifique sua resposta usando um computador. Finalmente, simule o algoritmo passo a passo utilizando um debugger e configurando breakpoints no início de cada iteração. Se não souber como utilizar um debugger, procure ajuda de um monitor.
lista = [] n = 10 + D while n != 0: lista.append(n % 2) n = n // 2 for d in reversed(lista): print(d, end='')
Legibilidade de código
À medida em que os programas que escrevemos se tornam maiores, precisamos nos preocupar com o quão fácil é ler e entender o código. Chamamos isso de legibilidade de código. Para um código ser legível, ele deve ter pelo menos algumas características:
- Comentários que resumem o que faz um conjunto de comandos.
- Formatação bem definida (indentação, espaçamentos, nomes)
- Documentação adequada de cada programa ou algoritmo.
Um pouco de maniqueísmo - Comentários
Mal:
import math
# lê um valor do teclado
x = input()
# lê outro valor
y = input()
# calcula o x ao quadrado
# mais y ao quadrado
z = x*x + y*y;
# tira a raiz de z
z = math.sqrt(z)
# mostra o valor de z
print(z)
Bem:
import math
# lê valores dos catetos
x = float(input())
y = float(input())
# aplica Pitágoras
z = x*x + y*y
z = math.sqrt(z)
# devolve a hipotenusa
print(z)
Um pouco de maniqueísmo - Indentação
Mal:
print("n:") ; n = int(input())
if n==1: print("Unidade")
elif(n >=0):
if(n% 3): print("Deixa resto")
else: print("Não deixa")
else: print("Negativo")
Bem:
n = int(input("n:"))
if n == 1:
print("Unidade")
elif n >= 0:
if n % 3 == 1:
print("Deixa resto")
else:
print("Não deixa")
else:
print("Negativo")
Um pouco de maniqueísmo - Nome de variáveis
Mal:
exercises = int(input())
n1 = float(input())
n3 = float(input())
n2 = 4.0
n4 = 6.0
if exercices > 7:
n4 = 7.0
aluno = (n1*n2 + n3*n4)/10
print(aluno)
Bem:
exercicios = int(input())
nota1 = float(input())
nota2 = float(input())
peso1 = 4.0
peso2 = 6.0
if exercicios > 7:
peso2 = 7.0
media = (nota1*peso1 + nota2*peso2)/10
print(media)
Um pouco de maniqueísmo - Documentação
Mal:
r = float(input())
v = (4.0*3.1425*r*r*r)/3.0
print(v)
- O que esse programa faz?
- O valor de
está errado, com quem eu falo?
Mal:
'''
Calcula o volume de uma esfera.
Lê o raio de uma esfera pelo
teclado e imprime na tela o
volume correspondente.
ENTRADA:
- o raio da esfera
SAÍDA:
- o volume da esfera
PRÉ-CONDIÇÃO:
- O raio deve ser maior que zero.
AUTOR: Joãozinho
'''
PI = 3.1415
r = float(input())
v = (4.0*PI*r*r*r)/3.0;
print(v)
-
Escolhendo um estilo de programação
a) Não existe um jeito certo de escrever código: cada programador adota um estilo diferente, o importante é manter-se consistente. Pesquise sobre a importância da legibilidades de programas de computador: posição das chaves, indentação, uso de espaço, etc. Depois reflita e disserte brevemente sobre o seguinte tema: “Um código é escrito só uma vez, mas é lido diversas vezes”.
b) Manter o código organizado pode ser trabalhoso, especialmente para programadores iniciantes. Mas felizmente o existem ferramentas que ajudam nessa tarefa. Pesquise e experimente ferramentas de formatação automática de códigos, como plugins ou extensões de editores de texto e IDEs.
Exercícios criativos
-
O histograma de um conjunto de dados é um gráfico da frequência com que cada valor aparece. Escreva um programa que leia uma lista de tamanho informado pelo usuário e com valores inteiros entre 1 e 9 e imprima o histograma na mesma forma que o exemplo: para uma lista de tamanho 20 com os valores 1, 1, 1, 1, 2, 2, 2, 3, 3, 4, 6, 7, 8, 8, 8, 9, 9, 9, 9, 9 deverá imprimir:
+---------+ | *| |* *| |** **| |*** **| |**** ****| +---------+ 123456789
-
No exemplo dos números primos visto em aula, não precisamos testar todos os números entre
, para verificar se dividem ou não . Basta testarmos até . Por quê? Qual o maior divisor possível de ? Na verdade, basta testarmos os números . Por quê? -
Lidando com os casos especiais: Algumas vezes, um algoritmo “funciona” para vários casos, mas não para todos. Esses casos “problemáticos” geralmente são casos especias, que devem ser tratados individualmente, como o primeiro ou o último elemento de uma lista, etc. Por exemplo, os dois primeiros elementos da sequência de Fibonacci são calculados de maneira especial. Similarmente, para descobrir o menor número de uma lista, começamos com o primeiro ou o último elemento e comparamos com os demais. Por esse motivo, sempre nos lembremos dos possíveis casos especiais!
Suponha que existam
lâmpadas numeradas ordenadamente. Elas estão ligadas em um circuito de tal modo que toda vez que uma lâmpada é acesa ou apagada, outras lâmpadas podem são apagadas ou acendidas. Quando uma lâmpada é- ACENDIDA, as posteriores invertem.
- APAGADA, as anteriores invertem.
Inicialmente:
Lâmpada 3 acendida:
Lâmpada 4 apagada:
a) Escreva um programa que receba
- o número de lâmpadas,
, de um circuito como no anterior, - um índice de uma lâmpada específica,
, que deverá ficar acesa.
O programa deve instruir o usuário a acender ou apagar lâmpadas para que, no final, apenas a lâmpada de número
fique acesa. Para acender uma lâmpada de número XX , imprima “Acender lampada XX” e, para apagar uma lâmpada de número XX, imprima “Apagar lampada XX”b) Modifique o programa anterior para receber
- o número de lâmpadas,
, de um circuito como no anterior, - o número de lâmpadas que devem ficar acesas,
, - uma lista de
índices de lâmpadas que devem ficar acesas.
No final, apenas as lâmpadas listadas devem permanecer acesas.
c) Verifique se o seu programa está correto. Para isso, verifique se existe algum caso especial. Faça um teste de mesa se necessário.